package com.ict.web.service;



import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.ict.common.core.domain.entity.SysDept;
import com.ict.common.core.page.TableDataInfo;
import com.ict.web.domain.ExtractExpert;
import com.ict.web.domain.ReviewTask;
import com.ict.web.dto.*;
import com.ict.web.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 评审任务Service接口
 *
 * @author ruoyi
 * @date 2022-02-16
 */
public interface IReviewTaskService extends IService<ReviewTask>
{
    /**
     * 获取评审任务详细（项目id）
     *
     * @param proId 项目id
     * @return 评审任务
     */
    public ReviewTask getReviewTaskInfo(Long proId);

    /**
     * 查询专家评审任务详情
     * @param reviewTaskId
     * @return
     */
    public  ReviewTaskExpertThirdVo selectExpertById(Long reviewTaskId,Long expertId);
    /**
     * 查询三方评审任务详情
     * @param reviewTaskId
     * @return
     */
    public ReviewTaskExpertThirdVo selectThirdById(Long reviewTaskId);
    /**
     * 查询专家评审任务列表
     *
     * @param queryExpert 评审任务
     * @return 评审任务集合
     */
    public List<ReviewTaskExpertListVo> selectExpertList1(QueryReviewTaskExpertDto queryExpert,Integer pageNum,Integer pageSize);

    /**
     * 查询三方评审任务列表
     * @param queryThird
     * @return
     */
    public PageInfo selectThirdList(QueryReviewTaskThirdDto queryThird);
    /**
     * 新增评审任务
     *
     * @param addDto 评审任务
     * @return 结果
     */
    public Long insertReviewTask(InsertReviewTaskDto addDto);
    /**
     * 查看评审任务详情（项目id查）
     *
     * @param projectId 查看评审任务详情
     * @return 评审任务
     */

    public ReviewTaskDetailVo reviewTaskDetailByProId(Long projectId);
    /**
     * 查看评审任务详情（评审任务id查）
     *
     * @param reviewTaskId 查看评审任务详情
     * @return 评审任务
     */

    public ReviewTaskDetailVo reviewTaskDetailByTaskId(Long reviewTaskId);

    /**
     * 查看评审任务详情（年度计划id查）
     *
     * @param planId 查看评审任务详情
     * @return 评审任务
     */

    public ReviewTaskDetailVo reviewTaskDetailByPlanId(Long planId);

    /**
     * 查询评审任务列表
     *
     * @param dto 评审任务
     * @return 评审任务
     */

    public List<ReviewTaskListVo> selectReviewTaskList(ReviewTaskDto dto);
    /**
     * 修改评审任务
     *
     * @param updateDto 评审任
     * @return 结果
     */
    public int updateReviewTask(UpdateReviewTaskDto updateDto);
    /**
     * 专家删除评审任务
     *
     * @param reviewTaskId 评审任务主键
     * @return 结果
     */

    public int deleteReviewTaskByReviewTaskId(Long reviewTaskId);
    /**
     * 专家删除对应的评审任务
     *
     * @param reviewTaskId 评审任务主键
     * @param expertId 专家id
     * @return 结果
     */

    public boolean removeExpert(Long reviewTaskId,Long expertId);
    /**
     * 转第三方
     * @param taskName 评审任务名字
     * @param proId 项目id
     *@param ormId 机构id
     *@return 结果
     */
    public int exchangeThird(String taskName,Long proId,Long ormId);

    /**
     * 查询专家抽取监控详情
     * @param reviewTaskId
     * @return
     */
    public ExpertExtractMonitorDetailVo selectExpertExtractMonitorById(Long reviewTaskId,String extractTime);

    /**
     * 查询专家抽取监控列表
     * @param queryDto
     * @return
     */
    public List<ExpertExtractionMonitorListVo> selectExpertExtractMonitorList(QueryExpertExtractMonitorDto queryDto);


    /**
     * 专家申请取消
     * @param reviewTaskId 评审任务id
     * @param applyReason  申请理由
     * @return
     */
    public boolean applyCancel(Long reviewTaskId,String applyReason);

    /**
     * 专家处理接受任务操作
     * @param reviewTaskId
     * @param receiveStatus
     * @param refuseReason
     * @return
     */
    public boolean dealWith(Long reviewTaskId,String receiveStatus,String refuseReason);
    /**
     * 查看评审任务某个抽取专家信息
     *
     * @param reviewTaskId 查看评审任务id
     *@param expertId 专家id
     * @return 评审任务
     */

    public ExtractExpert extractExpertByReviewTaskId(@Param("reviewTaskId") Long reviewTaskId, @Param("expertId")Long expertId);

    /**
     * 专家处理操作后的详情信息
     * @param reviewTaskId
     * @return
     */
    public ExpertIsReceiveReviewTaskDetailVo receiveTaskDetail(Long reviewTaskId,Long expertId);
    /**
     * 抽取单位列表
     * @return
     */
    public List<SysDept> extractUnit();
    /**
     * 评审任务专家抽取表list
     * @param reviewTaskId
     * @return
     */
    public List<ExtractExpert> getExtractExpertList(Long reviewTaskId);
    /**
     * 修改评审任务
     *
     * @param dto
     * @return 结果
     */
    public int edit(ReviewTaskEditDto dto);
    /**
     * 评审任务详情（判断更换专家需求）
     *
     * @param reviewTaskId 查看评审任务详情
     * @return 评审任务
     */

    public ReviewTaskDetailVo detailTask(Long reviewTaskId);
    /**
     * 专家抽取表信息（评审任务信息和抽取表总分字段）
     *@param expertId 专家id
     * @return 评审任务
     */

    public List<ExpertMessageVo> expertMessage(Long expertId);
    /**
     * 项目管理详情-查看评审任务详情
     *@param approvalId 审核记录id
     * @return 评审任务
     */

    ReviewTaskVo findReviewTaskVo(Long approvalId);
    /**
     * 专家处理接受任务操作H5
     * @param reviewTaskId
     * @param receiveStatus
     * @param refuseReason
     * @param userId
     * @return
     */
    public boolean dealWithH5(Long reviewTaskId,String receiveStatus,String refuseReason,Long userId);
}
